# 适配器模式（Adapter Pattern）是一种结构型设计模式，它允许不兼容的接口协同工作。适配器模式通过创建一个中间层（适配器），将一个类的接口转换成客户端期望的另一个接口，从而实现接口之间的兼容。
# 下面是一个使用适配器模式的例子，我们将模拟一个电子书阅读器和不同格式的电子书之间的适配。
# 首先，我们定义一个电子书接口和两个不同格式的电子书类：
# ```python
class EBookInterface:
    def turn_page(self):
        raise NotImplementedError("Subclass must implement this method")

    def open_book(self):
        raise NotImplementedError("Subclass must implement this method")

    def get_page(self):
        raise NotImplementedError("Subclass must implement this method")


class Kindle(EBookInterface):
    def turn_page(self):
        print("Kindle: turning the page...")

    def open_book(self):
        print("Kindle: opening the book...")

    def get_page(self):
        return "Kindle: current page content..."


class Nook(EBookInterface):
    def turn_page(self):
        print("Nook: flipping the page...")

    def open_book(self):
        print("Nook: opening the book...")

    def get_page(self):
        return "Nook: current page content..."


# ```
# 现在，假设我们有一个旧的电子书阅读器，它只能阅读 `PaperBook` 类型的书籍，而 `PaperBook` 类有一个不同于 `EBookInterface` 的接口：
# ```python
class PaperBook:
    def open_cover(self):
        print("PaperBook: opening the cover...")

    def turn_page(self):
        print("PaperBook: turning the page...")

    def read_page(self):
        return "PaperBook: current page content..."


# ```
# 为了使旧的阅读器能够阅读 `Kindle` 和 `Nook` 电子书，我们可以创建一个适配器：
# ```python
class EBookAdapter(PaperBook):
    def __init__(self, ebook):
        self.ebook = ebook

    def open_cover(self):
        self.ebook.open_book()

    def turn_page(self):
        self.ebook.turn_page()

    def read_page(self):
        return self.ebook.get_page()


# ```
# 现在，我们可以使用适配器来让旧的阅读器阅读电子书：
# ```python
# 创建电子书实例
kindle = Kindle()
nook = Nook()
# 创建适配器实例
kindle_adapter = EBookAdapter(kindle)
nook_adapter = EBookAdapter(nook)
# 使用适配器
kindle_adapter.open_cover()  # 输出: Kindle: opening the book...
kindle_adapter.turn_page()  # 输出: Kindle: turning the page...
print(kindle_adapter.read_page())  # 输出: Kindle: current page content...
nook_adapter.open_cover()  # 输出: Nook: opening the book...
nook_adapter.turn_page()  # 输出: Nook: flipping the page...
print(nook_adapter.read_page())  # 输出: Nook: current page content...
# ``` 在这个例子中，`EBookAdapter` 类实现了 `PaperBook` 接口，并将调用委托给 `EBookInterface`
# 实例。这样，旧的阅读器就可以通过适配器来阅读新的电子书格式，而不需要修改阅读器本身的代码。这就是适配器模式的魅力所在——它允许不兼容的接口通过一个中间层进行适配，从而协同工作。
